/*
 * Trace log blocks sent over HBUS
 *
 * Copyright (C) 1999-2019, Broadcom.
 *
 *      Unless you and Broadcom execute a separate written software license
 * agreement governing use of this software, this software is licensed to you
 * under the terms of the GNU General Public License version 2 (the "GPL"),
 * available at http://www.broadcom.com/licenses/GPLv2.php, with the
 * following added to such license:
 *
 *      As a special exception, the copyright holders of this software give you
 * permission to link this software with independent modules, and to copy and
 * distribute the resulting executable under terms of your choice, provided that
 * you also meet, for each linked independent module, the terms and conditions
 * of the license of that module.  An independent module is a module which is
 * not derived from this software.  The special exception does not apply to any
 * modifications of the software.
 *
 *      Notwithstanding the above, under no circumstances may you combine this
 * software in any way with any other Broadcom software provided under a license
 * other than the GPL, without Broadcom's express prior written consent.
 *
 *
 * <<Broadcom-WL-IPTag/Open:>>
 *
 * $Id: event_trace.h 693870 2017-04-05 09:03:17Z $
 */

/**
 * @file
 * @brief
 * Define the trace event ID and tag ID
 */

#ifndef _WL_DIAG_H
#define _WL_DIAG_H

#define DIAG_MAJOR_VERSION 1 /* 4 bits */
#define DIAG_MINOR_VERSION 0 /* 4 bits */
#define DIAG_MICRO_VERSION 0 /* 4 bits */

#define DIAG_VERSION                                                           \
    ((DIAG_MICRO_VERSION & 0xF) | (DIAG_MINOR_VERSION & 0xF) << 4 |            \
     (DIAG_MAJOR_VERSION & 0xF) << 8)
/* bit[11:8] major ver */
/* bit[7:4] minor ver */
/* bit[3:0] micro ver */

/* event ID for trace purpose only, to avoid the conflict with future new
 * WLC_E_ , starting from 0x8000
 */
#define TRACE_FW_AUTH_STARTED 0x8000
#define TRACE_FW_ASSOC_STARTED 0x8001
#define TRACE_FW_RE_ASSOC_STARTED 0x8002
#define TRACE_G_SCAN_STARTED 0x8003
#define TRACE_ROAM_SCAN_STARTED 0x8004
#define TRACE_ROAM_SCAN_COMPLETE 0x8005
#define TRACE_FW_EAPOL_FRAME_TRANSMIT_START 0x8006
#define TRACE_FW_EAPOL_FRAME_TRANSMIT_STOP 0x8007
#define TRACE_BLOCK_ACK_NEGOTIATION_COMPLETE 0x8008 /* protocol status */
#define TRACE_BT_COEX_BT_SCO_START 0x8009
#define TRACE_BT_COEX_BT_SCO_STOP 0x800a
#define TRACE_BT_COEX_BT_SCAN_START 0x800b
#define TRACE_BT_COEX_BT_SCAN_STOP 0x800c
#define TRACE_BT_COEX_BT_HID_START 0x800d
#define TRACE_BT_COEX_BT_HID_STOP 0x800e
#define TRACE_ROAM_AUTH_STARTED 0x800f
/* Event ID for NAN, start from 0x9000 */
#define TRACE_NAN_CLUSTER_STARTED 0x9000
#define TRACE_NAN_CLUSTER_JOINED 0x9001
#define TRACE_NAN_CLUSTER_MERGED 0x9002
#define TRACE_NAN_ROLE_CHANGED 0x9003
#define TRACE_NAN_SCAN_COMPLETE 0x9004
#define TRACE_NAN_STATUS_CHNG 0x9005

/* Parameters of wifi logger events are TLVs */
/* Event parameters tags are defined as: */
#define TRACE_TAG_VENDOR_SPECIFIC 0 /* take a byte stream as parameter */
#define TRACE_TAG_BSSID 1  /* takes a 6 bytes MAC address as parameter */
#define TRACE_TAG_ADDR 2   /* takes a 6 bytes MAC address as parameter */
#define TRACE_TAG_SSID 3   /* takes a 32 bytes SSID address as parameter */
#define TRACE_TAG_STATUS 4 /* takes an integer as parameter */
#define TRACE_TAG_CHANNEL_SPEC 5 /* takes one or more wifi_channel_spec as */
                                 /* parameter */
#define TRACE_TAG_WAKE_LOCK_EVENT                                              \
    6                          /* takes a wake_lock_event struct as parameter */
#define TRACE_TAG_ADDR1 7      /* takes a 6 bytes MAC address as parameter */
#define TRACE_TAG_ADDR2 8      /* takes a 6 bytes MAC address as parameter */
#define TRACE_TAG_ADDR3 9      /* takes a 6 bytes MAC address as parameter */
#define TRACE_TAG_ADDR4 10     /* takes a 6 bytes MAC address as parameter */
#define TRACE_TAG_TSF 11       /* take a 64 bits TSF value as parameter */
#define TRACE_TAG_IE 12        /* take one or more specific 802.11 IEs */
                               /* parameter, IEs are in turn indicated in */
                               /* TLV format as per 802.11 spec */
#define TRACE_TAG_INTERFACE 13 /* take interface name as parameter */
#define TRACE_TAG_REASON_CODE 14 /* take a reason code as per 802.11 */
                                 /* as parameter */
#define TRACE_TAG_RATE_MBPS 15   /* take a wifi rate in 0.5 mbps */
#define TRACE_TAG_REQUEST_ID 16  /* take an integer as parameter */
#define TRACE_TAG_BUCKET_ID 17   /* take an integer as parameter */
#define TRACE_TAG_GSCAN_PARAMS                                                 \
    18 /* takes a wifi_scan_cmd_params struct as parameter */
#define TRACE_TAG_GSCAN_CAPABILITIES                                           \
    19 /* takes a wifi_gscan_capabilities struct as parameter */
#define TRACE_TAG_SCAN_ID 20            /* take an integer as parameter */
#define TRACE_TAG_RSSI 21               /* take an integer as parameter */
#define TRACE_TAG_CHANNEL 22            /* take an integer as parameter */
#define TRACE_TAG_LINK_ID 23            /* take an integer as parameter */
#define TRACE_TAG_LINK_ROLE 24          /* take an integer as parameter */
#define TRACE_TAG_LINK_STATE 25         /* take an integer as parameter */
#define TRACE_TAG_LINK_TYPE 26          /* take an integer as parameter */
#define TRACE_TAG_TSCO 27               /* take an integer as parameter */
#define TRACE_TAG_RSCO 28               /* take an integer as parameter */
#define TRACE_TAG_EAPOL_MESSAGE_TYPE 29 /* take an integer as parameter */
                                        /* M1-1, M2-2, M3-3, M4-4 */

typedef union {
    struct {
        uint16 event : 16;
        uint16 version : 16;
    };
    uint32 t;
} wl_event_log_id_ver_t;

#endif /* _WL_DIAG_H */
